function itcast(selector) {
  var dom = document.querySelector(selector);
  var obj = {
    tap: function (cb) {
      // 按下的时间
      var startTime;
      // 按下的坐标
      var startX, startY;
      // 按下
      dom.addEventListener("touchstart", function (e) {
        // 判断按下的手指的个数
        if (e.touches.length > 1) {
          return;
        }

        // 2 记录按下的时间
        // Date.now() 返回的是 1970 1 1 到现在的毫秒数 
        startTime = Date.now();

        // 3 记录按下的坐标
        startX = e.touches[0].clientX;
        startY = e.touches[0].clientY;
      });
      // 离开 松开
      dom.addEventListener("touchend", function (e) {

        // 1 判断手指的个数
        if (e.changedTouches.length > 1) {
          return;
        }

        // 2 记录离开的时间
        var endTime = Date.now();

        // 判断 按下的时长是否满足要求 300ms
        if (endTime - startTime > 300) {
          return;
        }


        // 3 记录离开的坐标
        var endX = e.changedTouches[0].clientX;
        var endY = e.changedTouches[0].clientY;

        // 判断滑动的距离 5px
        // 要注意距离 要绝对值 Mats.abs()  -5 => 5 
        if (Math.abs(endX - startX) > 5 || Math.abs(endY - startY) > 5) {
          // 都不满足
          return;
        }
        // 经过以上的验证  可以触发自己的tap点击的逻辑
        // console.log("自己封装的tap");

        cb(e);

      })
    },
    swipe: function (cb) {

      // 按下时间
      var startTime;
      // 按下的坐标
      var startX, startY;

      // 按下
      dom.addEventListener("touchstart", function (e) {
        // 判断手指的个数
        if (e.touches.length > 1) {
          return;
        }

        // 记录按下的时间
        startTime = Date.now();

        // 记录按下的坐标
        startX = e.touches[0].clientX;
        startY = e.touches[0].clientY;
      })

      // 离开
      dom.addEventListener("touchend", function (e) {
        // 判断手指的个数
        if (e.changedTouches.length > 1) {
          return;
        }

        // 记录离开的时间
        var endTime = Date.now();

        // 判断
        if (endTime - startTime > 800) {
          return;
        }

        // 先判断距离 再判断方向 如果 根本就没有产生距离 直接返回-不满足条件
        var endX = e.changedTouches[0].clientX;
        var endY = e.changedTouches[0].clientY;

        // 先判断水平方向有没有滑动 如果有 再判断 往左还是往右

        // 方向
        var direction;
        if (Math.abs(endX - startX) > 5) {
          // 在水平方向上发生了移动 需要判断 左 还是右 滑
          // 右滑动  结束的x坐标 大于 开始 x坐标
          direction = endX > startX ? "right" : "left";
        } else if (Math.abs(endY - startY) > 5) {
          // 在垂直方向上发生了移动 下滑动  还是上滑动

          // 下滑  结束y 大于  开始的y坐标
          direction = endY > startY ? "down" : "up";
        } else {
          // 不满足 用户就没有滑动过
          return;
        }

        // 执行自己的滑动的逻辑
        // console.log(direction);
        cb(direction);

      })

    }
  };
  return obj;
}
